home *** CD-ROM | disk | FTP | other *** search
- Path: news.mr.net!usenet
- From: John Cleland <clelaj@born.com>
- Newsgroups: comp.lang.pascal.misc,comp.lang.c++,comp.lang.c,comp.lang.pascal.borland
- Subject: Re: Tough FACTORIAL math problem...
- Date: Wed, 14 Feb 1996 14:30:49 -0600
- Organization: Born
- Message-ID: <31224679.6193@born.com>
- References: <4fr8be$ass@news.iconn.net>
- NNTP-Posting-Host: 204.73.78.51
- Mime-Version: 1.0
- Content-Type: text/plain; charset=us-ascii
- Content-Transfer-Encoding: 7bit
- X-Mailer: Mozilla 2.0 (Win95; I)
-
- The Crow wrote:
- >
- > Here is what I am trying to do, I want to find the last NON-ZERO digit of a
- > given factorial. For instance,
- >
- > 5! = 120
- >
- > so the last non-zero digit is 2. I want to be able to do this up to 1000.
- > Problem is, no matter how huge of a data-type you use, there isn't any way for
- > the computer to handle 1000!, it is however possible to find the last non-zero
- > digit somehow. One thing I have tried is as I went through mulitplying the
- > series of numbers in the factorial (5 * 4 * 3 * 2) I would remove all the
- > trailing ZEROS, I got this to work up to 789, but it wont work with 1000 and i
- > am not really sure why. If anyone has a clue how I can do this let me know.
-
- Don't just strip the trailing zeros, remove all digits except the last non-zero
- digit (which is your output) and then multiply by the next number in your sequence.
- This keeps the numbers down to a managable level and gives the correct answer as
- no more significant digit can affect the value of the LSD.
-
- If we have a function int LSD(int val) which computes the value of the least
- significant non-zero digit the pseudo C code should be something like :
-
- int factLSD = 1;
- int i;
-
- for (i = 1; i <= 1000; i++)
- {
- factLSD = LSD(i * factLSD);
- print i, factLSD;
- }
-
-
- John
- john.cleland@born.com
-